home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Erweiterung / POLYNOM_NULLSTELLEN.LST < prev    next >
File List  |  1989-06-01  |  2KB  |  99 lines

  1. '
  2. ' Nullstellen nach Bairstow
  3. ' Berechnung von reellen und komplexen Nullstellen eines beliebigen
  4. ' Polynoms
  5. '
  6. @anleitung
  7. @werte
  8. @rechnen
  9. @lÖsung
  10. END
  11. '
  12. '
  13. ' Zuerst die Eingabe und die entsprechende Dimensionierungen
  14. PROCEDURE werte
  15.   za|=1
  16.   PRINT "Grad des Polynoms :";
  17.   INPUT " ",n|
  18.   DIM a(n|+1)
  19.   DIM b(n|+3)
  20.   DIM c(n|+3)
  21.   PRINT "Bitte nun die Koeffizienten:"
  22.   FOR i|=n|+1 DOWNTO 1
  23.     PRINT "X(";(i|-1);") =";
  24.     INPUT " ",a(i|)
  25.   NEXT i|
  26.   PRINT "Näherungswerte P,Q :"
  27.   INPUT "    P = ",p
  28.   INPUT "    Q = ",q
  29. RETURN
  30. PROCEDURE anleitung
  31.   CLS
  32.   PRINT TAB(20);"Nullstellen nach Bairstow"
  33.   PRINT
  34.   PRINT "DIESES PROGRAMM BERECHNET REELLE UND KOMPLEXE NULLSTELLEN"
  35.   PRINT
  36.   PRINT "EINES POLYNOMS ITERATIV NACH EINEM VON BAIRSTOW ANGEGEBENEN"
  37.   PRINT
  38.   PRINT "VERFAHREN. DIE ITERATION KANN UNTERBROCHEN WERDEN, DAS"
  39.   PRINT
  40.   PRINT "AUGENBLICKLICHE ERGEBNIS KÖNNEN SIE IM DIREKTMODUS DURCH"
  41.   PRINT "AUFRUFEN DER PROZEDUR 'LOESUNG' ERHALTEN."
  42. RETURN
  43. PROCEDURE rechnen
  44.   qu=q
  45.   pe=p
  46.   REPEAT
  47.     @horner
  48.     pe1=pe
  49.     pe=pe-(b(2)*c(3)-b(1)*c(4))/(c(3)*c(3)-c(4)*c(2))
  50.     qu=qu-(b(1)*c(3)-b(2)*c(2))/(c(3)*c(3)-c(4)*c(2))
  51.   UNTIL ABS(pe1-pe)<1.0E-08
  52. RETURN
  53. PROCEDURE lÖsung
  54.   wurzel=(pe*pe+4*qu)/4
  55.   IF wurzel<0
  56.     ' Komplex konjugieren
  57.     wurzel=SQR(ABS(wurzel))
  58.     PRINT
  59.     PRINT "X(";za|;") =";pe/2;"+j*";wurzel
  60.     INC za|
  61.     PRINT
  62.     PRINT "X(";za|;") =";pe/2;"-j*";wurzel
  63.   ELSE
  64.     ' reell Konjugieren
  65.     x=pe/2+SQR(wurzel)
  66.     PRINT
  67.     PRINT "X(";za|;") =";x
  68.     INC za|
  69.     x=pe/2-SQR(wurzel)
  70.     PRINT
  71.     PRINT "X(";za|;") =";x
  72.     INC za|
  73.   ENDIF
  74.   ' Hier wird die Reduktion durchgeführt
  75.   SUB n|,2
  76.   WHILE n|<>0
  77.     FOR i|=1 TO n|+1
  78.       a(i|)=b(i|+2)
  79.     NEXT i|
  80.     IF n|=1
  81.       INC za|
  82.       PRINT
  83.       PRINT "X(";za|;")= ";-a(1)/a(2)
  84.       DEC n|
  85.     ELSE IF n|<>1
  86.       @rechnen
  87.     ENDIF
  88.   WEND
  89. RETURN
  90. PROCEDURE horner
  91.   ' Wiederholtes doppelzeiliges Horner-Schema
  92.   FOR i|=n|+1 DOWNTO 1
  93.     b(i|)=a(i|)+pe*b(i|+1)+qu*b(i|+2)
  94.   NEXT i|
  95.   FOR i|=n|+1 DOWNTO 1
  96.     c(i|)=b(i|)+pe*c(i|+1)+qu*c(i|+2)
  97.   NEXT i|
  98. RETURN
  99.